<template>
	<view>
		<button @click="showAuthModal">登录/授权</button>
		<button @click="getPhoneNumber">获取电话号码</button>
		<button @click="goToWeatherPage">天气</button>
		<button @click="goplace">位置</button>
		<button @click="gonibianma">经纬度逆编码</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// 存储用户信息
				userInfo: null,
				// 存储电话号码
				phoneNumber: null,
				// 存储session_key
				sessionKey: null,
			};
		},
		methods: {
			gonibianma(){
			wx.navigateTo({
				url: '/pages/index/nibianma' // 确保路径正确
			});	
			},
			goplace(){
				wx.navigateTo({
					url: '/pages/index/place' // 确保路径正确
				});
			},
			goToWeatherPage() {
				wx.navigateTo({
					url: '/pages/index/tianqi' // 确保路径正确
				});
			},
			showAuthModal() {
				// 弹出自定义的授权提示框
				wx.showModal({
					title: '授权请求',
					content: '需要您授权后才可使用该功能',
					success: (res) => {
						if (res.confirm) {
							// 用户点击确定后，调用 wx.authorize 获取用户授权
							this.authorize();
						} else {
							// 用户点击取消，可以在这里处理取消逻辑
							console.log('用户拒绝授权');
						}
					}
				});
			},
			authorize() {
				wx.authorize({
					scope: 'scope.userInfo',
					success: () => {
						// 用户已授权，可以调用 getUserInfo 获取用户信息
						this.getUserInfo();
					},
					fail: (err) => {
						// 用户拒绝授权，可以提示用户，或者引导用户去设置中开启授权
						console.error('授权失败', err);
						wx.showModal({
							title: '授权失败',
							content: '需要您授权后才可使用该功能',
							showCancel: false,
							success: (res) => {
								if (res.confirm) {
									wx.openSetting({
										success: (res) => {
											if (res.authSetting['scope.userInfo']) {
												// 用户在设置页授权成功，可以重新调用 getUserInfo
												this.getUserInfo();
											}
										}
									});
								}
							}
						});
					}
				});
			},
			getUserInfo() {
				// 调用 wx.getUserInfo 获取用户信息
				wx.getUserInfo({
					success: (res) => {
						console.log('用户信息：', res.userInfo);
						// 存储用户信息
						this.userInfo = res.userInfo;
						// 调用wx.login获取code
						this.login();
					},
					fail: () => {
						console.error('获取用户信息失败');
					}
				});
			},
			login() {
				// 调用 wx.login 获取 code
				wx.login({
					success: res => {
						if (res.code) {
							// 使用code换取openid和session_key
							this.getOpenId(res.code);
						} else {
							console.log('登录失败！' + res.errMsg);
						}
					}
				});
			},
			
			getOpenId(code) {
				// 构建请求微信接口的URL
				const appId = "wx3fa613f291428758"; // 请替换为自己的小程序AppID
				const appSecret = "850659ce35e53124a44950088b84ce1f"; // 请替换为自己的小程序AppSecret
				const url =
					`https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`;

				// 发送请求到微信接口
				uni.request({
					url: url,
					method: 'GET',
					success: (response) => {
						if (response.data && response.data.openid) {
							console.log('获取到的openid:', response.data.openid);
							console.log('获取到的session_key:', response.data.session_key);
							// 存储session_key
							this.sessionKey = response.data.session_key;
						} else {
							console.error('获取openid失败', response.data);
						}
					},
					fail: (error) => {
						console.error('请求openid接口失败', error);
					}
				});
			},
			getPhoneNumber() {
				// 获取电话号码
				wx.getPhoneNumber({
					desc: '用于获取用户电话号码',
					success: (res) => {
						if (res.errMsg === 'getPhoneNumber:ok') {
							const encryptedData = res.encryptedData;
							const iv = res.iv;
							// 发送到后端解密电话号码
							this.sendToServerForDecryption(encryptedData, iv);
						} else {
							console.error('获取电话号码失败', res.errMsg);
						}
					},
					fail: (err) => {
						console.error('获取电话号码失败', err);
					}
				});
			},
			sendToServerForDecryption(encryptedData, iv) {
				// 发送到后端进行解密，获取电话号码
				uni.request({
					url: 'http://localhost:8080/decrypt', // 确保端口号和路径正确
					method: 'POST',
					data: {
						encryptedData: encryptedData,
						iv: iv,
						sessionKey: this.sessionKey
					},
					success: (response) => {
						if (response.data) {
							console.log('电话号码:', response.data);
							this.phoneNumber = response.data;
						} else {
							console.error('解密电话号码失败', response.data);
						}
					},
					fail: (error) => {
						console.error('请求后端解密电话号码失败', error);
					}
				});
			}
		}
	};
</script>

<style>
</style>